4.3.4 在函数间传递映射

在函数间传递映射并不会制造出该映射的一个副本。实际上,当传递映射给一个函数,并对这个映射做了修改时,所有对这个映射的引用都会察觉到这个修改,如代码清单4-54所示。

代码清单4-54 在函数间传递映射

func main() {
  // 创建一个映射,存储颜色以及颜色对应的十六进制代码
  colors := map[string]string{
    "AliceBlue":  "#f0f8ff",
    "Coral":    "#ff7F50",
    "DarkGray":  "#a9a9a9",
    "ForestGreen": "#228b22",
  }
  // 显示映射里的所有颜色
  for key, value := range colors {
    fmt.Printf("Key: %s Value: %s\n", key, value)
  }
  // 调用函数来移除指定的键
  removeColor(colors, "Coral")
  // 显示映射里的所有颜色
  for key, value := range colors {
    fmt.Printf("Key: %s Value: %s\n", key, value)
  }
}
// removeColor将指定映射里的键删除
func removeColor(colors map[string]string, key string) {
  delete(colors, key)
}

如果运行这个程序,会得到代码清单4-55所示的输出。

代码清单4-55 代码清单4-54的输出

Key: AliceBlue Value: #F0F8FF
Key: Coral Value: #FF7F50
Key: DarkGray Value: #A9A9A9
Key: ForestGreen Value: #228B22
Key: AliceBlue Value: #F0F8FF
Key: DarkGray Value: #A9A9A9
Key: ForestGreen Value: #228B22

可以看到,在调用了 removeColor 之后, main 函数里引用的映射中不再有 Coral 颜色了。这个特性和切片类似,保证可以用很小的成本来复制映射。

results matching ""

    No results matching ""